home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)Z / (A)Z11.ADF / LOGO / LOGOSOURCE / zerr.c < prev   
C/C++ Source or Header  |  1987-06-29  |  3KB  |  123 lines

  1.  
  2. /*    This file contains most of the error messages for LOGO, along with
  3. *    the functions that print the various messages.
  4. *
  5. *    Copyright (C) 1979, The Children's Museum, Boston, Mass.
  6. *    Written by Douglas B. Klunder.
  7. */
  8. #include "logo.h"
  9. extern int yychar,errtold;
  10. extern short yyerrflag;
  11. extern char *ibufptr;
  12. extern char charib;
  13. extern int letflag;
  14. extern struct lexstruct keywords[];
  15.  
  16. aerr2(etype,arg,op)    /* This handles an unknown second input to infix
  17.             *  arithmetic operations.  */
  18. register char *etype,*arg;
  19. char op;
  20. {
  21.     if (!errtold) {
  22.         nputs(etype);
  23.         pf1(" of %l and what?\n",arg);
  24.         putchar(op);
  25.         puts(" must have two numbers for inputs.");
  26.         errtold++;
  27.     }
  28. }
  29.  
  30. notenf(op)
  31. register op;
  32. {
  33.     if (!errtold) {
  34.         pf1("Not enough inputs to %s.\n",keywords[op].word);
  35.         errtold++;
  36.     }
  37. }
  38.  
  39.  
  40. unerr(c)    /* Unknown following unary - or +. */
  41. register char c;
  42. {
  43.     if (!errtold) {
  44.         putchar(c);
  45.         puts(" what?");
  46.         putchar(c);
  47.         pf1(" must be followed by a number.\n");
  48.         errtold++;
  49.     }
  50. }
  51. inferr(arg,op)    /* Incorrect second input to infix operator. */
  52. register char *arg;
  53. register op;
  54. {
  55.     if (!errtold) {
  56.         switch(op) {
  57.             case '+': aerr2("sum",arg,'+');break;
  58.             case '-': aerr2("difference",arg,'-');break;
  59.             case '*': aerr2("product",arg,'*');break;
  60.             case '/': aerr2("quotient",arg,'/');break;
  61.             case '\\': aerr2("remainder",arg,'\\');break;
  62.             case '<': aerr2("lessp",arg,'<');break;
  63.             case '>': aerr2("greaterp",arg,'>');break;
  64.             case '^': aerr2("pow",arg,'^');break;
  65.             case '=':
  66.                 pf1("equalp of %l and what?\n",arg);
  67.                 puts("= takes two inputs.");
  68.         }
  69.         errtold++;
  70.     }
  71. }
  72. op2er1(op,arg)    /* No second input to two-input operation. */
  73. register op;
  74. register char *arg;
  75. {
  76.     if (!errtold) {
  77.         nputs(keywords[op].word);
  78.         pf1(" of %l and what?\n",arg);
  79.         nputs(keywords[op].word);
  80.         puts(" takes two inputs.");
  81.         errtold++;
  82.     }
  83. }
  84. terr()    /* Incorrect title. */
  85. {
  86.     puts("That doesn't look like a title to me.");
  87.     errclear();
  88. }
  89. yyerror(str)
  90. register char *str;
  91. {
  92.     if ( *str == 'y') {
  93.         puts("Too many levels of recursion.");
  94.         errtold++;
  95.     }
  96. /* yacc has two messages.  We ignore "syntax error" which has been dealt with
  97. downlevel already, and on "yacc stack overflow" we must clear out the tables.
  98.  */
  99. }
  100.  
  101. logoyerror()    /* General unknown command. */
  102. {
  103.     if (yychar==1) return;
  104.     puts("I don't understand that.");
  105.     puts("Please submit a Logo bug report, telling what you typed,");
  106.     puts(" and asking for a more specific error message.");
  107. }
  108. errclear()    /* clear error status in editor. */
  109. {
  110.     ibufptr=NULL;
  111.     yychar= -1;
  112.     yyerrflag=0;
  113.     letflag=0;
  114. }
  115. ungood(name,val)
  116. register char *name,*val;
  117. {
  118.     nputs(name);
  119.     pf1(" doesn't like %l as input.\n",val);
  120.     errhand();
  121. }
  122.  
  123.